﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DBAccess;
using SSPharma.Common;
using SSPharma.Model;
using System.Data.Common;
using System.Transactions;
using SSPharma.Biz.Common;

namespace SSPharma.Biz.NhanSu
{
    class BizDSBoPhan
    {
        //khai báo hàm Common dùng để lấy các hàm dùng chung
        private BizCommon _BizCommon = new BizCommon();

        #region dùng cho danh sách
        /// <summary>
        /// User: TAMNN 16/08/2014
        /// Mục đích: Lấy cấu trúc các cột,chiều dài,thứ tự... của các cột cần hiển thi
        /// </summary>
        /// <param name="_tenform">Tên bảng của danh mục đó trong database</param>
        /// <returns></returns>
        public DataTable ft_DSDinhDangLuoi(string _tenform)
        {
            string strQuery = "Select * from HT_DinhDangHTDM where TenBang =@TenBang order by STT";
            SQLServer.Param[] Params = new SQLServer.Param[1];
            Params[0] = new SQLServer.Param("@TenBang", _tenform);
            return Global.DataFactory.GetDataTable(strQuery.ToString(), Params);
        }

        /// <summary>
        /// User: TAMNN 16/08/2014
        /// Mục đích: Xóa dữ liệu
        /// </summary>
        /// <param name="_tenbang">tên bảng của danh mục đó trong database</param>
        /// <param name="ListKhoaChinh">List khóa chính</param>
        /// <param name="Values">List giá trị tương ứng với khóa chính đó</param>
        /// <returns></returns>
        public string fs_DeleteData(string values)
        {
            string strSQL = string.Empty;
            strSQL += " delete HT_MenuNhanSu";
            strSQL += " where DepartId =@DepartId";
            SQLServer.Param[] Params = new SQLServer.Param[1];
            Params[0] = new SQLServer.Param("@DepartId", values);
            using (DbDataReader dataReader = Global.DataFactory.Reader(strSQL.ToString(), Params))
            {
                if (dataReader.HasRows)
                {
                    return dataReader.GetSchemaTable().Rows[0][0].ToString();
                }
            }
            return "Xóa thành Công";
        }

        /// <summary>
        /// User: TAMNN 16/08/2014
        /// Mục đích: lấy danh sách theo danh mục
        /// </summary>
        /// <returns></returns>
        public DataTable ft_GetListdata()
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" SELECT a.DepartId,a.Depart_Sub,a.DepartName,ParentId = b.Depart_Sub,ParentName = b.DepartName,a.Active,CreatedDate = CONVERT(VARCHAR(20),a.CreatedDate,103),ModifiedDate = CONVERT(VARCHAR(20),a.ModifiedDate,103),a.CreatedBy");
            strSQL.Append(" FROM HT_MenuNhanSu a with(nolock) LEFT OUTER JOIN HT_MenuNhanSu b ON b.DepartId = a.ParentId");
            strSQL.Append(" ORDER by a.ParentId,a.STT");
            return Global.DataFactory.GetDataTable(strSQL.ToString());
        }

        #endregion

        #region dùng cho thêm bộ phận trong nhân sự
        /// <summary>
        /// User: TAMNN 15/08/2014
        /// lấy phòng ban theo mã phòng ban
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public DataTable ft_GetDataPhongBanTheoMa(string Ma)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" SELECT a.*,b.ParentId,ParentName = b.DepartName,ParentId_sub = b.Depart_Sub,c.TenDonVi,TenCN= d.TenDonVi from HT_MenuNhanSu a");
            strSQL.Append(" left outer join HT_MenuNhanSu b with(nolock) on b.DepartId = a.ParentId");
            strSQL.Append(" left outer join HT_DM_DonVi c with(nolock) on a.MaDonVi = c.MaDonVi");
            strSQL.Append(" left outer join HT_DM_DonVi d with(nolock) on a.MaCN = d.MaDonVi");
            strSQL.Append(" where a.DepartId = @Ma");
            SQLServer.Param[] Params = new SQLServer.Param[1];
            Params[0] = new SQLServer.Param("@Ma", Ma);
            return Global.DataFactory.GetDataTable(strSQL.ToString(), Params);
        }
        /// <summary>
        /// User: TAMNN 15/08/2014
        /// Lay cau truc de luu du lieu xong database
        /// </summary>
        /// <returns></returns>
        public DataSet fs_LayCauTrucTable(string FormName)
        {
            DataSet dsdata = new DataSet();
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" SELECT a.*,b.ParentId,ParentName = b.DepartName,ParentId_sub = b.Depart_Sub,c.TenDonVi,TenCN= d.TenDonVi from HT_MenuNhanSu a");
            strSQL.Append(" left outer join HT_MenuNhanSu b with(nolock) on b.DepartId = a.ParentId");
            strSQL.Append(" left outer join HT_DM_DonVi c with(nolock) on a.MaDonVi = c.MaDonVi");
            strSQL.Append(" left outer join HT_DM_DonVi d with(nolock) on a.MaCN = d.MaDonVi");
            strSQL.Append(" where 1=2");
            DataTable dt_PhongBan = Global.DataFactory.GetDataTable(strSQL.ToString());
            dt_PhongBan.TableName = "dt_PhongBan";
            dsdata.Tables.Add(dt_PhongBan);
            SQLServer.Param[] Params = new SQLServer.Param[4];
            Params[0] = new SQLServer.Param("@FormName", FormName);
            Params[1] = new SQLServer.Param("@MaDonVi", Global.DonVi);
            Params[2] = new SQLServer.Param("@BoPhan", Global.BoPhan);
            Params[3] = new SQLServer.Param("@UserName", Global.UserName);
            DataTable dt_Default = Global.DataFactory.ReturnDataTable("sp_LayDuLieuMacDinh", CommandType.StoredProcedure, Params);
            dt_Default.TableName = "dt_Default";
            dsdata.Tables.Add(dt_Default);
            return dsdata;
        }
        /// <summary>
        /// User: TAMNN 15/08/2014
        /// Them danh muc phòng ban.
        /// </summary>
        /// <param name="p_dtPhongBan"></param>
        /// <param name="TienTo"></param>
        public void fg_InsertPhongBan(DataTable p_dtPhongBan, string TienTo)
        {
            try
            {
                string query_phongban = "Select * from HT_MenuNhanSu where 1 = 2";
                string query_congto = "Select * from HT_CongToHienHanh_" + TienTo + " where 1 = 2";
                if (p_dtPhongBan.Rows[0].RowState == DataRowState.Added)
                {
                    DataTable p_dtCongTo = _BizCommon.ft_GetDataCongToHienHanh(TienTo);
                    // TH01: lỗi
                    if (p_dtCongTo == null)
                    {
                        throw new System.Configuration.Provider.ProviderException("Không lấy được số chứng từ");
                    }
                    // TH01: tạo counter lưu xuống database
                    else if (p_dtCongTo.Rows.Count > 0)
                    {
                        using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
                        {
                            string p_sCreateCounter = _BizCommon.fs_GetCodeId(TienTo);
                            p_dtPhongBan.Rows[0]["DepartId"] = p_sCreateCounter;
                            p_dtCongTo.Rows[0]["SoHienTai"] = !string.IsNullOrEmpty(p_dtCongTo.Rows[0]["SoHienTai"].ToString()) ? (Convert.ToInt64(p_dtCongTo.Rows[0]["SoHienTai"]) + 1) : 1;
                            Global.DataFactory.RunSaveData(p_dtCongTo, query_congto);
                            Global.DataFactory.RunSaveData(p_dtPhongBan, query_phongban);
                            scope.Complete();
                            scope.Dispose();
                        }
                    }
                    // TH03: chưa có counter thì tạo counter đầu tiên
                    else if (p_dtCongTo.Rows.Count == 0)
                    {
                        using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
                        {
                            // chạy hàm tạo counter đầu tiên.
                            string createCounter = _BizCommon.fs_CreateCodeId(TienTo);
                            p_dtPhongBan.Rows[0]["DepartId"] = createCounter;
                            Global.DataFactory.RunSaveData(p_dtPhongBan, query_phongban);
                            scope.Complete();
                            scope.Dispose();
                        }
                    }

                }
                else
                {
                    using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
                    {
                        Global.DataFactory.RunSaveData(p_dtPhongBan, query_phongban);
                        scope.Complete();
                        scope.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                StringBuilder strSQL = new StringBuilder();
                strSQL.Append("insert into HT_NhatKyLoi(ManHinh,SoCT,NgayPhatSinh,UserName,MaLoi,DienGiai,TenHam) values(@ManHinh,@SoCT,@NgayPhatSinh,@UserName,@MaLoi,@DienGiai,@TenHam)");
                SQLServer.Param[] Params = new SQLServer.Param[7];
                Params[0] = new SQLServer.Param("@ManHinh", "frmPhongBan");
                Params[1] = new SQLServer.Param("@SoCT", p_dtPhongBan.Rows[0]["DepartId"]);
                Params[2] = new SQLServer.Param("@NgayPhatSinh", LibraryFormatConverter.ConvertStringDDMMYYYYToYYYYMMDD(LibraryFormatConverter.SetStringDateDefault));
                Params[3] = new SQLServer.Param("@UserName", Global.UserName);
                Params[4] = new SQLServer.Param("@MaLoi", "");
                Params[5] = new SQLServer.Param("@DienGiai", ex.Message);
                Params[6] = new SQLServer.Param("@TenHam", "InsertPhongBan");
                Global.DataFactory.NonQuery(strSQL.ToString(), Params);
                throw new System.Configuration.Provider.ProviderException(ex.Message);
            }
        }
        /// <summary>
        /// User: TAMNN 15/08/2014
        /// Cap nhat danh muc phòng ban
        /// </summary>
        /// <param name="dt"></param>
        public void fg_UpdatePhongBan(DataTable dt)
        {
            try
            {
                string query_phongban = "Select * from HT_MenuNhanSu where 1 = 2";
                Global.DataFactory.RunSaveData(dt, query_phongban);
            }
            catch (Exception ex)
            {
                throw new System.Configuration.Provider.ProviderException(ex.Message);
            }
        }
        /// <summary>
        /// User:TAMN 15/08/2014
        /// Lay counter tu them ma tien to
        /// </summary>
        /// <param name="MaTienTo"></param>
        /// <returns></returns>
        public string fs_LayCongToTuDong(string MaTienTo)
        {
            return _BizCommon.fs_GetCodeId(MaTienTo);
        }
       
        /// <summary>
        /// User: TAMNN
        /// Mục đích: Lấy tên bộ phận cha theo mã bộ phận
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public DataTable ft_GetTenPhongBanCha(string Ma)
        {
            return _BizCommon.ft_LayDuLieuTrongTable("HT_MenuNhanSu", "DepartId = '" + Ma + "'");
        }
        /// <summary>
        /// User: TAMNN 
        /// Mục đích: Lấy tên đơn vị theo mã đơn vị
        /// </summary>
        /// <param name="Ma"></param>
        /// <returns></returns>
        public string ft_GetTenDonVi(string Ma)
        {
            return _BizCommon.fs_LayDuLieuTrongTable("HT_DM_DonVi", "TenDonVi", "MaDonVi = '" + Ma + "'");
        }
        /// <summary>
        /// User:TAMNN 28/07/2014 
        /// Mục đích: kiểm tra mã phòng ban đã tồn tại hay chưa
        /// </summary>
        /// <param name="p_sGiatri"></param>
        /// <returns></returns>
        public string fs_CheckDataExistsMaPhu(string p_sGiatri)
        {
            return _BizCommon.fs_LayDuLieuTrongTable("HT_MenuNhanSu", "Depart_Sub", "Depart_Sub  = N'" + p_sGiatri + "'");
        }
        #endregion
       

    }
}
